#ifndef REMOTECALL_H
#define REMOTECALL_H

#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QProcess>


class RemoteCall
{
public:
    RemoteCall();
    ~RemoteCall();
    bool run();
    bool isRunning();
    QByteArray Call(const QString &data, int timeoutMs = 1000);
    QString GJ(QString fun_name, QJsonArray params);
    QString JX(QByteArray res_data);
    bool releaseFile();
    QString Call_fun_rect(float width, float height);

private:
    QProcess proc;
    QString remotePath = "/data/local/tmp/myprocess";
};

/**
 * @brief 将 Qt 资源文件释放到指定磁盘路径
 * @param resourcePath 资源路径（格式：":/images/icon.png"）
 * @param targetDir    目标目录（格式："C:/output"）
 * @param overwrite    是否覆盖已存在的文件
 * @return true 成功，false 失败
 */
inline bool releaseResourceToPath(const QString &resourcePath,
                           const QString &targetDir,
                           bool overwrite)
{
    // 检查资源是否存在
    if (!QFile::exists(resourcePath)) {
        //qWarning() << "资源文件不存在:" << resourcePath;
        return false;
    }

    // 构建目标文件路径（保留资源子目录结构）
    QString targetFilePath = targetDir + "/" +
                             QFileInfo(resourcePath).fileName();

    // 如果需要保留完整目录结构（如资源路径为":/data/files/doc.txt"）
    // 取消注释以下代码：
    // QString subPath = resourcePath.mid(2); // 去掉":/"前缀
    // targetFilePath = QDir(targetDir).filePath(subPath);

    // 创建目标目录
    QFileInfo targetFileInfo(targetFilePath);
    QDir targetDirObj(targetFileInfo.absolutePath());
    if (!targetDirObj.exists() && !targetDirObj.mkpath(".")) {
        //qWarning() << "无法创建目录:" << targetDirObj.absolutePath();
        return false;
    }

    // 检查目标文件是否存在且不覆盖
    if (QFile::exists(targetFilePath) && !overwrite) {
        //qWarning() << "目标文件已存在且未启用覆盖:" << targetFilePath;
        return false;
    }

    // 打开资源文件
    QFile resFile(resourcePath);
    if (!resFile.open(QIODevice::ReadOnly)) {
        //qWarning() << "无法打开资源文件:" << resourcePath
        //           << "错误:" << resFile.errorString();
        return false;
    }

    // 写入目标文件
    QFile targetFile(targetFilePath);
    if (!targetFile.open(QIODevice::WriteOnly)) {
        //qWarning() << "无法创建目标文件:" << targetFilePath
        //           << "错误:" << targetFile.errorString();
        resFile.close();
        return false;
    }

    // 复制内容
    qint64 bytesWritten = targetFile.write(resFile.readAll());
    if (bytesWritten == -1) {
        //qWarning() << "文件写入失败:" << targetFilePath
        //           << "错误:" << targetFile.errorString();
        resFile.close();
        targetFile.close();
        return false;
    }

    resFile.close();
    targetFile.close();

    //qDebug() << "资源释放成功:" << resourcePath << "->" << targetFilePath;
    return true;
}
#endif // REMOTECALL_H
